Modern computer systems are composed of a plurality of different hardware components and software components that interact in a complex manner. Individual components perform their tasks by utilizing services that are offered by other hardware components or software components. Prominent examples of this are operating systems that access drivers for the hardware components or web-based services that run jointly on a local computer and a remote computer.
It is required that the integration of applications of this type does not depend on the hardware components and software components used. The administration of such systems therefore is very demanding because small changes can lead to undesirable interactions between individual components. It is usually not possible to estimate the risk of errors, as well as their probability and extent beforehand, when individual components are changed, for example, in the form of an update. Administrators typically are only able to detect the occurring errors and the corresponding sources of errors after an extended trial-and-error phase.